// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证（版本 2.0）进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动！任何基于本项目二次开发而产生的一切法律纠纷和责任，我们不承担任何责任！

using Microsoft.Extensions.FileProviders;
using Microsoft.OpenApi.Models;

Serve.Run(RunOptions.Default.AddWebComponent<WebComponent>());

public class WebComponent : IWebComponent
{
    public void Load(WebApplicationBuilder builder, ComponentContext componentContext)
    {
        // 设置日志过滤
        builder.Logging.AddFilter((provider, category, logLevel) =>
        {
            return !new[] { "Microsoft.Hosting", "Microsoft.AspNetCore" }.Any(u => category.StartsWith(u)) && logLevel >= LogLevel.Information;
        });

        // 设置接口超时时间和上传大小-Kestrel
        builder.WebHost.ConfigureKestrel(u =>
        {
            u.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(30);
            u.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(30);
            u.Limits.MaxRequestBodySize = null;
        });

       
    }
    public void Configure(WebApplication app)
    {
        // 移除环境判断，确保生产环境也能访问 Swagger
        app.UseSwagger();
        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "Admin.NET API v1");
            c.RoutePrefix = "";  // 设置为空，使 Swagger UI 在根路径显示
        });

        // 其他中间件配置...
        // 添加静态文件访问配置
        

        // 如果前端在其他位置，添加 CORS 配置
        //app.UseCors(builder =>
        //{
        //    builder.WithOrigins("http://192.168.255.234:3000")
        //           .AllowAnyMethod()
        //           .AllowAnyHeader();
        //});
    }
}